package com.tenbit.tbw.svc;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.tenbit.tbw.dao.ProductInfoDetailEDAO;
import com.tenbit.tbw.vo.PDT1010VO;

@Service
public class PDT1020SVCImpl implements PDT1020SVC {
	private Logger log=Logger.getLogger(this.getClass());
	
	@Autowired
	private ProductInfoDetailEDAO dao;
	
	String msg=null;

	private Map<String, Object> resultMap=new HashMap<String, Object>();
	
	@Override
	public Map<String, Object> insProductInfoDetail(PDT1010VO pDT1010VO) {
		log.debug(" ==============PDT1020SVCImpl-insProductInfoDetail:상품상세 정보 Insert ==============");
		
		resultMap=checkData(pDT1010VO);
		
		log.debug(resultMap);
		
		if((Boolean) resultMap.get("result")){
			int a=0;
			a=dao.insertProductInfoDetail(pDT1010VO);
			log.debug(a);
			if(a>0){
				msg="정상적으로"+a+"개"+"Insert 되었습니다.";
				resultMap.put("msg",msg);
				return resultMap;
			}
			msg="조건 재확인 바랍니다."+0+"개"+"Insert 되었습니다.";
			resultMap.put("msg",msg);
		}
		
		resultMap.put("msg",resultMap.get("resultMassg"));
		return resultMap;
	}

	@Override
	public Map<String, Object> setProductInfoDetail(PDT1010VO pDT1010VO) {
		log.debug(" ==============PDT1020SVCImpl-setProductInfoDetail:상품상세 정보 Update ==============");
		
		resultMap=checkData(pDT1010VO);
		
		if((Boolean) resultMap.get("result")){
			if(pDT1010VO.getProductNumber()==0){
				msg="처리실패 -productNumber: 상품번호가 없습니다";
				resultMap.put("msg",msg);
				return resultMap;
			} else {
			
			int a=0;
			a=dao.updateProductInfoDetail(pDT1010VO);
			if(a>0){
				msg="정상적으로"+a+"개"+"Update 되었습니다.";
				resultMap.put("msg",msg);
				return resultMap;
			}
			msg="일치하는 상품 번호가 없습니다."+0+"개"+"Update 되었습니다.";
			resultMap.put("msg",msg);
			}
		} 
		resultMap.put("msg",resultMap.get("resultMassg"));
		return resultMap;
	}

	@Override
	public Map<String, Object> getProductInfoDetail(PDT1010VO pDT1010VO) {
		log.debug(" ==============PDT1020SVCImpl-getProductInfoDetail:상품상세 정보 Select ==============");
		
		boolean result=false;
		String resultMassg=null;
		int productNumber=pDT1010VO.getProductNumber();
		PDT1010VO productDetailInfo=new PDT1010VO();
		
		if(productNumber==0){
			resultMassg="처리실패 -productNumber: 상품번호가 없습니다.";
			result=false;
			resultMap.put("result",result);
			resultMap.put("resultMassg", resultMassg);
			return resultMap;
		}
		
		productDetailInfo=dao.selectProductInfoDetail(pDT1010VO);
		
		if(productDetailInfo==null){
			resultMassg="처리실패 -상품목록이 없습니다.";
			result=false;
			resultMap.put("result",result);
			resultMap.put("resultMassg", resultMassg);
			return resultMap;
		}
		
		msg="정상적으로 처리 되었습니다.";
		result=true;
		resultMap.put("result",result);
		resultMap.put("msg", msg);
		resultMap.put("productDetailInfo", productDetailInfo);
		
		return resultMap;
	}

	@Override
	public Map<String, Object> delProductInfoDetail(PDT1010VO pDT1010VO) {
		log.debug(" ==============PDT1020SVCImpl-delProductInfoDetail:상품상세 정보 Delete ==============");
		boolean result=false;
		String resultMassg=null;
		int productNumber=pDT1010VO.getProductNumber();
		log.debug(productNumber);
		
		int a=0;
		
		if(productNumber==0){
			resultMassg="처리실패 -productNumber: 상품번호가 없습니다.";
			result=false;
			resultMap.put("result",result);
			resultMap.put("resultMassg", resultMassg);
			return resultMap;
		}
		
		a=dao.deleteProductInfoDetail(pDT1010VO);
		
		if(a>0){
			msg="정상적으로"+a+"개"+"Delete 되었습니다.";
			result=true;
			resultMap.put("result",result);
			resultMap.put("msg",msg);
			return resultMap;
		}
		resultMassg="처리실패 : productNumber: 일치하는 상품번호가 없습니다.";
		result=false;
		resultMap.put("result",result);
		resultMap.put("resultMassg", resultMassg);
		return resultMap;
	}
	
	//Insert or Update DATA Test
	public Map<String, Object> checkData(PDT1010VO pDT1010VO){
		Map<String, Object> checkMap=new HashMap<String, Object>();
		boolean result=false;
		String resultMassg=null;
		
		int employeeCode=pDT1010VO.getEmployeeCode();			
		String productCode=pDT1010VO.getProductCode();
		String ProductName=pDT1010VO.getProductName();
		String itemCode=pDT1010VO.getItemCode();				
		String companyCode=pDT1010VO.getCompanyCode();			
		String productSize=pDT1010VO.getProductSize();
		String unitMeasureCode=pDT1010VO.getUnitMeasureCode();
		BigDecimal unitPrice=pDT1010VO.getUnitPrice();
		String attachedFileName=pDT1010VO.getAttachedFileName();
		
		BigDecimal zero = new BigDecimal(0);
				
		if(employeeCode==0){
			resultMassg="처리 실패 employeeCode : 사원번호가 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(productCode==null ||productCode.equals("")){
			resultMassg="처리 실패 productCode : 상품코드가 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(ProductName==null ||ProductName.equals("")){
			resultMassg="처리 실패 ProductName : 상품명이 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(itemCode==null ||itemCode.equals("")){
			resultMassg="처리 실패 itemCode : 품목코드가 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(companyCode==null ||companyCode.equals("")){
			resultMassg="처리 실패 companyCode : 제조사 코드가 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(productSize==null ||productSize.equals("")){
			resultMassg="처리 실패 productSize : 규격이 없습니다";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(unitMeasureCode==null ||unitMeasureCode.equals("")){
			resultMassg="처리 실패 unitMeasureCode : 단위코드가 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(unitPrice==null ||unitPrice.compareTo(zero)==0){
			resultMassg="처리 실패 unitPrice : 단가가 없습니다.";
			result=false;
			checkMap.put("resultMassg", resultMassg);
			checkMap.put("result", result);
			return checkMap;
		} else if(attachedFileName==null||attachedFileName.equals("")){
			pDT1010VO.setAttachedFileName("");
		}
		
		resultMassg="정상적으로 처리 되었습니다.";
		result=true;
		checkMap.put("resultMassg", resultMassg);
		checkMap.put("result", result);
		
		return checkMap;
		
	}
	@Override
	public String getCategoryName(String itemCode) {
		
		return dao.getCaTeName(itemCode);
	}

}
